<?php

/**
 * Description of password
 *
 * 
 */
class password {
    const PEP = 'nardo2xaLa$Puta$!';
    var $p; // string del password
    var $s; // salt unico
    var $h; //hashed string
    
    
    function __construct ($string){
        $this->p = $string;
    }
    
    /* returns rand string 22 char long*/
    function createSalt(){
        $c = md5(uniqid(rand(),true));
        return substr($c, 0, 22);
    }
    
    /* encode a given string with given salt(optional if empty generates one)
     *  and returns an array with hashed and unique salt used*/
    function encode($salt){
        $this->p = $this->p.PEP;
        $this->s = $salt;
        If ($this->s == ""){
            $this->s = createSalt();
        }
        $this->h = crypt ($this->p.'$2a$15$'.$this->salt);
        return array($this->h, $this->s);
    }
    
    /* a partir de un user-pass de la db y de un string dado, compara si
     * son iguales y devuelve, true, false o 0 si error
     */
    function checkPass(){
        // acceso a db y recuperacion de pass del user y del salt
       list ($pass, $salt) = encode(""); //pasarle a encode el salt de db
       IF ($salt == $this->s){
           If ($pass == $this->p){
               return TRUE;               
           }
           return FALSE;
       }
       return 0; 
    }
    
    /* comprueva que el pass antiguo es correcto
     * hashea el nuevo pass y lo cambia por el antigueo en db*/
    function changePass($new){
        //this->p ya tiene el valor old pk al crear la clase le pasamos old
        if (checkPass){
            $new = encode("");
            $this->p = $new;
        }
       // conect db and update pass with this-p        
    }
    
}

?>
